import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;

import java.util.Collections;

public class MyAutoGenerator2 {

    private static String url="jdbc:mysql://192.168.1.181:3306/research?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&useTimezone=true";
    private static String username="research";
    private static String password="3anfRkt5de7Jcxbb";
    private static String parent="com.caea.secure";
    private static String module="";
    public static void main(String[] args){
        FastAutoGenerator.create(url,
                        username, password)
                .globalConfig(builder -> {//设置全局配置
                    builder.author("xiewei") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
//                            .fileOverride() // 覆盖已生成文件
                            .dateType(DateType.TIME_PACK)
                            .commentDate("yyyy-MM-dd HH:mm:ss")//设置时间格式
                            .outputDir(System.getProperty("user.dir")+module+"/src/main/java");
//                            .outputDir("D://"); // 指定输出目录

                })
                .packageConfig(builder -> {//设置包配置
                    builder.parent(parent) // 设置父包名
                            .entity("entity.purchase")
                            .service("service.purchase")
                            .serviceImpl("service.purchase.impl")
                            .mapper("mapper.purchase")
                            .controller("controller.purchase")
                         //   .moduleName("purchase") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,
                                    System.getProperty("user.dir")+module+"/src/main/resources/mapper")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {//生成策略组
                    builder.addInclude("purchase_it_item") // 设置需要生成的表名
                            .addTablePrefix("pl_") // 设置过滤表前缀
                            //开启Service策略
                            .serviceBuilder()
                            .formatServiceFileName("%sService")//SERVICE命名
                            .formatServiceImplFileName("%sServiceImpl")//SERVICEIMPL命名
                            //开启entity策略
                            .entityBuilder()
                            .enableLombok()
                            .versionColumnName("version")//数据库
                            .formatFileName("%sEntity")
                            .versionPropertyName("version")//属性
                            .logicDeleteColumnName("deleted")//设置逻辑删除数据库
                            .logicDeletePropertyName("deleted")//设置逻辑删除数属性
                            .enableTableFieldAnnotation()//属性加上注解声明
                            .naming(NamingStrategy.underline_to_camel)

                            .addTableFills(new Column("ctime", FieldFill.INSERT))
                            .addTableFills(new Property("utime", FieldFill.INSERT_UPDATE))
                            .idType(IdType.AUTO)
                            //开启controller策略
                            .controllerBuilder()
                            .formatFileName("%sController")//命名
                            .enableRestStyle()//开启注解 RestController
                            //mapper策略
                            .mapperBuilder()
                            .superClass(BaseMapper.class)
                            .formatMapperFileName("%sMapper")
                            .enableMapperAnnotation()
                            .formatXmlFileName("%sMapper");
                })
//                .templateEngine() // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
